﻿using System;
using System.Collections;
using System.Linq;
using System.Text;

namespace DnevnikKlass
{
    class Program
    {
        static void Main(string[] args)
        {
            ZapisClass[] z = new ZapisClass[3];
            z[0] = new ZapisClass("mama");
            z[1] = new ZapisClass("papa");
            z[2] = new ZapisClass("dada");

            Console.ReadLine();
            z[0].Zapis = "ee";

            Console.ReadLine();
            z[2].Zapis = "dan";

            DnevnikClass dc = new DnevnikClass(z);

            Action<String, ZapisClass[]> f = (zapis, _dnevnik) =>
            {
                ZapisClass[] temp = new ZapisClass[_dnevnik.Length + 1];
                Array.Copy(_dnevnik, temp, _dnevnik.Length);
                ZapisClass zc = new ZapisClass(zapis);
                temp[_dnevnik.Length] = zc;
                Console.WriteLine("ЧИСЛО элементов {0}", temp.Length);
                _dnevnik = temp;
                Console.WriteLine("ЧИСЛО элементов {0}", temp.Length);
            };

            dc.Added = f;
            ZapisClass [] massivC = dc.DnevnikMassiv;

            foreach (ZapisClass i in massivC) Console.WriteLine(i.Zapis);

            Console.ReadLine();
        }
    }

    /// <summary>
    /// Задание класса, хранящего запись и время изменения записи
    /// </summary>
    public class ZapisClass
    {
        private String _zapis;

        public String Zapis
        {
            get
            {
                return _zapis;
            }
            set
            {
                DataZapisi = DateTime.Now;
                _zapis = value;
            }
        }

        public DateTime DataZapisi { get; private set; }

        public ZapisClass(String strochka)
        {
            Zapis = strochka;
            DataZapisi = DateTime.Now;
        }
    }

    /// <summary>
    /// Задание класса, хранящего массив записей
    /// </summary>
    public class DnevnikClass : IComparer, IEnumerable
    {
        private ZapisClass[] _dnevnikMassiv;

        public ZapisClass[] DnevnikMassiv
        {
            get
            {
                return _dnevnikMassiv;
            }
        }

        public DnevnikClass()
        {

        }

        public DnevnikClass(ZapisClass[] _massiv)
        {
            Array.Sort(_massiv, new DnevnikClass());
            _dnevnikMassiv = _massiv;
        }

        //Неверный код!!!
        public Action<String, ZapisClass[]> Added
        {
            set
            {
                Action<String, ZapisClass[]> f = value;
                Console.WriteLine("введите строку");
                f(Console.ReadLine(), _dnevnikMassiv);
            }
        }


        //Реализация интерфейса IComparer
        Int32 IComparer.Compare(Object m1, Object m2)
        {
            ZapisClass x1 = (ZapisClass) m1;
            ZapisClass x2 = (ZapisClass) m2;
            if (x1.DataZapisi < x2.DataZapisi) return 1;
            if (x1.DataZapisi > x2.DataZapisi) return -1;
            return 0;
        }

        //Реализация интерфейса IEnumerable
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public IEnumerator GetEnumerator()
        {
            foreach (var i in _dnevnikMassiv)
            {
                yield return i;
            }
        }
    }
}
